<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //1.构造函数的问题。
        function Star(uname,age){
            this.uname = uname;
            this.age=age;
            // this.sing = function(){
            //     console.log('我会唱歌');
            // }
        }
         // 很多情况下，我们需要手动的利用constructor这个属性指回原来的构造函数
         Star.prototype = {
            //如果我们修改了原来的还原性对象，给原型对象赋值的释放一个对象，则必须手动的利用
            //constructor指回原来的构造函数
            constructor:Star,
            sing:function(){
                console.log('我会唱歌')
            },
            movie:function(){
                console.log('我会演电影')
            }
         }
        // Star.prototype.sing=function(){
        //     console.log('我会唱歌');
        // }
        var ldh = new Star('刘德华',18);
        var zxy = new Star('张学友',19);
        // console.log(ldh.sing === zxy.sing);
        // console.log(ldh.dir)
        console.log(ldh);//对象身上系统自己添加一个__proto__指向我们构造函数的原型对象
        ldh.sing();
        zxy.sing();
        console.log(ldh.__proto__ ===zxy.__proto__)
        // 方法的查找规则：首先先看ldh对象身上是否有sing 方法，如果有就执行这个对象上的sing
        // 如果没有sing这个方法，因为有__proto__的存在，就去构造函数原型对象prototype身上去查找sing这个方法
        console.log(Star.prototype);
        console.log(ldh.__proto__);
        console.log(Star.prototype.constructor);
        console.log(ldh.__proto__.constructor);
       
    </script>
</body>
</html>